from flask import Blueprint, request, jsonify
from app.models.categories import Category
from app.extensions import db
from app.routes.auth import token_required  # 复用token验证装饰器
from datetime import datetime, timezone  

category_bp = Blueprint('category', __name__)

# 系统预设分类（初始化用）
DEFAULT_CATEGORIES = {
    'expense': [
        {'name': '餐饮', 'icon': 'fas fa-utensils', 'sort_order': 1},
        {'name': '服饰', 'icon': 'fas fa-tshirt', 'sort_order': 2},
        {'name': '交通', 'icon': 'fas fa-car', 'sort_order': 3},
        {'name': '旅行', 'icon': 'fas fa-plane', 'sort_order': 4},
        {'name': '购物', 'icon': 'fas fa-shopping-bag', 'sort_order': 5},
        {'name': '宠物', 'icon': 'fas fa-paw', 'sort_order': 6},
        {'name': '通讯网费', 'icon': 'fas fa-phone', 'sort_order': 7},
        {'name': '烟酒', 'icon': 'fas fa-wine-glass', 'sort_order': 8},
        {'name': '学习', 'icon': 'fas fa-book', 'sort_order': 9},
        {'name': '日用品', 'icon': 'fas fa-home', 'sort_order': 10},
        {'name': '住房', 'icon': 'fas fa-building', 'sort_order': 11},
        {'name': '美妆', 'icon': 'fas fa-scissors', 'sort_order': 12},
        {'name': '医疗', 'icon': 'fas fa-heartbeat', 'sort_order': 13},
        {'name': '发红包', 'icon': 'fas fa-gift', 'sort_order': 14},
        {'name': '汽车/加油', 'icon': 'fas fa-gas-pump', 'sort_order': 15},
        {'name': '娱乐', 'icon': 'fas fa-gamepad', 'sort_order': 16},
        {'name': '运动', 'icon': 'fas fa-running', 'sort_order': 17},
        {'name': '数码', 'icon': 'fas fa-mobile-alt', 'sort_order': 18},
        {'name': '水电煤', 'icon': 'fas fa-bolt', 'sort_order': 19},
        {'name': '恋爱约会', 'icon': 'fas fa-heart', 'sort_order': 20},
        {'name': '书籍', 'icon': 'fas fa-book-open', 'sort_order': 21},
        {'name': '母婴', 'icon': 'fas fa-baby', 'sort_order': 22},
        {'name': '维修保养', 'icon': 'fas fa-wrench', 'sort_order': 23},
        {'name': '其他', 'icon': 'fas fa-folder-open', 'sort_order': 24}
    ],
    'income': [
        {'name': '工资', 'icon': 'fas fa-suitcase', 'sort_order': 1},
        {'name': '奖金', 'icon': 'fas fa-award', 'sort_order': 2},
        {'name': '股票', 'icon': 'fas fa-chart-line', 'sort_order': 3},
        {'name': '理财', 'icon': 'fas fa-piggy-bank', 'sort_order': 4},
        {'name': '兼职', 'icon': 'fas fa-laptop', 'sort_order': 5},
        {'name': '租金', 'icon': 'fas fa-home', 'sort_order': 6},
        {'name': '红包', 'icon': 'fas fa-gift', 'sort_order': 7},
        {'name': '版权', 'icon': 'fas fa-book-open', 'sort_order': 8},
        {'name': '提成', 'icon': 'fas fa-trophy', 'sort_order': 9},
        {'name': '营业', 'icon': 'fas fa-store', 'sort_order': 10},
        {'name': '退款', 'icon': 'fas fa-undo', 'sort_order': 11},
        {'name': '分红', 'icon': 'fas fa-coins', 'sort_order': 12},
        {'name': '外包', 'icon': 'fas fa-bolt', 'sort_order': 13},
        {'name': '奖励', 'icon': 'fas fa-star', 'sort_order': 14},
        {'name': '年终奖', 'icon': 'fas fa-medal', 'sort_order': 15},
        {'name': '中奖', 'icon': 'fas fa-crown', 'sort_order': 16},
        {'name': '投资', 'icon': 'fas fa-gem', 'sort_order': 17},
        {'name': '礼金', 'icon': 'fas fa-heart', 'sort_order': 18},
        {'name': '授课', 'icon': 'fas fa-chalkboard-teacher', 'sort_order': 19},
        {'name': '合作', 'icon': 'fas fa-users', 'sort_order': 20},
        {'name': '基金', 'icon': 'fas fa-money-bill-wave', 'sort_order': 21},
        {'name': '数码', 'icon': 'fas fa-mobile-alt', 'sort_order': 22},
        {'name': '创作', 'icon': 'fas fa-camera', 'sort_order': 23},
        {'name': '其他', 'icon': 'fas fa-folder-open', 'sort_order': 24}
    ]
}

# 初始化系统预设分类（项目启动时执行一次）
def init_default_categories():
    if not Category.query.first():  # 若未初始化过（不再检查user_id）
        for type_, cats in DEFAULT_CATEGORIES.items():
            for cat in cats:
                new_cat = Category(
                    type=type_,
                    name=cat['name'],
                    icon=cat['icon'],
                    sort_order=cat['sort_order'],
                    created_at=datetime.now(timezone.utc)
                )
                db.session.add(new_cat)
        db.session.commit()


# 获取所有分类（系统固定分类）
@category_bp.route('', methods=['GET'])
@token_required
def get_categories(current_user):
    # 直接查询所有系统分类（已无user_id关联）
    categories = Category.query.order_by(Category.sort_order).all()

    result = []
    for cat in categories:
        result.append({
            'id': cat.id,
            'type': cat.type,
            'name': cat.name,
            'icon': cat.icon,
            'is_custom': False  # 全部为系统固定分类
        })
    return jsonify(result), 200